package com.hyt.it.ogt.kq.service.gov.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hyt.it.ogt.kq.service.gov.model.dto.CandidateInfoObtResultDTO;
import com.hyt.it.ogt.kq.service.gov.model.excel.ExportTaskCandidateSheet;
import com.hyt.it.ogt.kq.service.gov.model.excel.ImportTaskCandidateSheet;
import com.hyt.it.ogt.kq.service.gov.model.param.CandidateParam;
import com.hyt.it.ogt.kq.service.gov.model.vo.CandidatePageVO;
import com.hyt.it.ogt.kq.service.gov.model.dto.CandidateInfoGceResultDTO;
import com.hyt.it.ogt.kq.service.gov.model.dto.ticket.CandidateInfoDTO;
import com.hyt.it.ogt.kq.service.model.entity.Candidate;
import com.hyt.it.ogt.kq.service.gov.model.param.CandidatePageParam;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * <p>
 * 考生表 Mapper 接口
 * </p>
 *
 * @author huangyh
 * @since 2021-03-08
 */
public interface CandidateMapper extends BaseMapper<Candidate> {

    /**
     * 查询考生信息分页数据
     *
     * @param pageParam
     * @param param
     * @return
     */
    Page<CandidatePageVO> page(Page<CandidatePageParam> pageParam, @Param("param") CandidatePageParam param);

    /**
     * 获取考生详细信息
     * @param candidateId
     * @return
     */
    CandidateParam getCandidateInfo(String candidateId);

    /**
     * 根据考试任务id获取考生
     * @param taskId
     * @return
     */
    List<Candidate> getCandidateByTaskId(String taskId);

    /**
     * 获取已上传个人照的考生信息
     * @param taskId
     * @param personalPhotoType
     * @return
     */
    List<Candidate> getCandidateWithPersonalPhoto(String taskId, Integer personalPhotoType);

    /**
     * 获取考生信息返回结果DTO
     * @param personalPhoto
     * @param taskCode
     * @param admissionNumber
     * @return
     */
    List<CandidateInfoObtResultDTO> getCandidateInfoObtResultDTO(Integer personalPhoto, String taskCode, String admissionNumber);

    /**
     * 获取考生信息返回结果DTO
     * @param personalPhoto
     * @param taskCode
     * @param admissionNumber
     * @return
     */
    List<CandidateInfoGceResultDTO> getCandidateInfoGceResultDTO(Integer personalPhoto, String taskCode, String admissionNumber);

    /**
     * 获取已编排的考生信息
     * @param candidateIds 多个 逗号分割
     * @return
     */
    List<Candidate> getArrangeCandidateInfo(String candidateIds);

    /**
     *判断是否存在 根据考生证件号
     * @param candidateSheets 根据导入考生的证件id 查询数量
     * @param taskId
     * @return
     */
    List<String> existByIdNumbers(List<ImportTaskCandidateSheet> candidateSheets, String taskId);

    /**
     * 批量插入考生数据
     * @param candidates
     * @return
     */
    int insertCandidates(@Param("candidates") List<Candidate> candidates);

    /**
     * 批量删除考生数据
     * @param ids
     */
    void removeByIds(@Param("ids") List<String> ids);

    /**
     * 获取任务下已存在的考生科目数据
     * @param taskId 考试任务id
     * @return 任务下已存在的考生科目数据
     */
    List<ImportTaskCandidateSheet> getExistedCandidateSubject(String taskId);

    /**
     * 获取任务下已存在的考生
     * @param taskId 考试任务id
     * @return 任务下已存在的考生科目数据
     */
    List<ImportTaskCandidateSheet> getExistedCandidate(String taskId);

    /**
     * 获取用于生成准考证的考生信息
     * @param taskId 考试任务id
     * @param proceed 是否继续生成准考证
     * @return 用于生成准考证的考生信息
     */
    List<CandidateInfoDTO> getCandidateInfoDTO(String taskId, Boolean proceed);


    List<CandidateInfoDTO> getCandidateInfoDTOByCandidateIds(String taskId, Set<String> candidateIds);

    /**
     * 获取考生信息，根据报名考生id，多个考生id逗号分隔。
     * @param candidateBmIds
     * @return
     */
    List<Candidate> selectCandidateByCandidateBmIds(@Param("candidateBmIds") List<String> candidateBmIds);
    
    
    /***
     * 根据taskids获取任务考生数据
     * @param taskIds
     * @return
     */
	List<Map<String, Object>> getTaskCandidateCountByTaskids(@Param("taskIds") List<String> taskIds);

    List<ExportTaskCandidateSheet> queryForTaskId(@Param("taskIds") String taskId);

}
